package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	fmt.Println("1、打印九九乘法表。如果可以要求间隔均匀.")
	multiplicationTable()
	fmt.Println("2、随机生成20以内的20个非0正整数,打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果.")
	randomNumber()
	fmt.Println("3、打印100以内的斐波那契数列.")
	fibonacciSequence()
}

// 1、打印九九乘法表。如果可以要求间隔均匀.
func multiplicationTable() {
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%v*%v=%v ", j, i, i*j)
		}
		fmt.Println()
	}
	fmt.Println()
}

// 2、随机生成20以内的20个非0正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果
func randomNumber() {
	src := rand.New(rand.NewSource(time.Now().UnixNano()))
	// r10 := rand.New(src)
	// r1 := rand.New(rand.NewSource(20))
	var (
		sum     = 0
		product = 1
	)

	for i := 0; i <= 20; i++ {
		r20 := src.Intn(19) + 1
		if i&1 == 1 {
			sum += r20
		} else {
			product *= r20
		}
	}
	fmt.Println(sum, product)
	fmt.Println()
}

// 3、打印100以内的斐波那契数列.
func fibonacciSequence() {
	f1, f2 := 1, 1
	// fmt.Println(f1, f2)
	for {
		if f2 <= 100 {
			f1, f2 = f2, f1+f2
			fmt.Println(f1)
		} else {
			break
		}
	}
}

// 阿飞老师的批改
// 1. Intn(n)的范围是[0, n),是一个半开集合，因此这里应该是Intn(20)
// 2. 循环过程中，你这里的i对应的是索引，因此i=0是第1个，应该求和，而你这里0&1=0，对应的是求积
